package com.hxx.day8a;

import com.hxx.day8a.domain.Book;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class TestDemo1 {
    public static void main(String[] args) {
        ref(String.class);
    }

    public static void ref(Class<?> aClass){
        StringBuilder sb = new StringBuilder();
        // 反射获取类型
        //拼接包
        sb.append("package ").append(aClass.getPackageName()).append(";\n");
        //拼接类名
        if (!aClass.isInterface()) {
            sb.append(Modifier.toString(aClass.getModifiers()))
                    .append(" class ").append(aClass.getSimpleName()).append(" {\n\t");
            //获取属性
            Field[] fields = aClass.getDeclaredFields();
            for (Field field : fields) {
                sb.append(Modifier.toString(field.getModifiers()))
                        .append(" ").append(field.getType().getSimpleName())
                        .append(" ").append(field.getName()).append(";\n\t");
            }
            //获取构造方法
            Constructor<?>[] constructors = aClass.getDeclaredConstructors();
            for (Constructor<?> constructor : constructors) {
                sb.append(Modifier.toString(constructor.getModifiers()))
                        .append(" ").append(aClass.getSimpleName())
                        .append("(");
                //判断是否有参数
                if (constructor.getParameterCount() > 0) {
                    Class<?>[] parameterTypes = constructor.getParameterTypes();
                    for (int i = 0; i < parameterTypes.length; i++) {
                        sb.append(parameterTypes[i].getSimpleName()).append(" arg").append(i);
                        if (i < parameterTypes.length - 1) {
                            sb.append(", ");
                        }
                    }
                    sb.append(") {\n\t");
                    sb.append("}\n\t");
                }else {
                    sb.append(") {\n\t");
                    sb.append("}\n\t");
                }

            }
            //获取方法
            Method[] methods = aClass.getDeclaredMethods();
            for (Method method : methods) {
                sb.append(Modifier.toString(method.getModifiers()))
                        .append(" ").append(method.getReturnType().getSimpleName())
                        .append(" ").append(method.getName()).append("(");
                //判断是否有参数
                if (method.getParameterCount() > 0) {
                    Class<?>[] parameterTypes = method.getParameterTypes();
                    for (int i = 0; i < parameterTypes.length; i++) {
                        sb.append(parameterTypes[i].getSimpleName()).append(" arg").append(i);
                        if (i < parameterTypes.length - 1) {
                            sb.append(", ");
                        }
                    }
                    sb.append(") {\n\t");
                    sb.append("}\n");
                }else {
                    sb.append(") {\n\t");
                    sb.append("}\n");
                }
            }
            sb.append("}");
            System.out.println(sb);
        }
    }
}





































